﻿using System;
using Delivery.AlipayClass;
using System.Xml;

namespace ECommerce.Alipay
{
	public partial class Delivery : System.Web.UI.Page
	{
		protected void Page_Load(object sender, EventArgs e)
		{

		}

		protected void BtnSendGoods_Click(object sender, EventArgs e)
		{
			//******************************************请求处理**********************************************//
			///////////////////////以下参数是需要设置的相关配置参数，设置后不会更改的///////////////////////////
			string partner = string.Empty;                                     //合作身份者ID
			string key = string.Empty;                         //安全检验码
			string input_charset = "utf-8";                                          //字符编码格式 目前支持 gbk 或 utf-8
			string sign_type = "MD5";                                                //加密方式 不需修改

			////////////////////////////////////////////////////////////////////////////////////////////////////

			//必填参数
			string trade_no = TxtTrade_no.Text.Trim();                      //支付宝交易号。它是登陆支付宝网站在交易管理中查询得到，一般以8位日期开头的纯数字（如：20100419XXXXXXXXXX） 
			string logistics_name = TxtLogistics_name.Text.Trim();          //物流公司名称
			string invoice_no = TxtInvoice_no.Text.Trim();                  //物流发货单号
			string transport_type = DDLTransport_type.SelectedValue.Trim(); //物流发货时的运输类型，三个值可选：POST（平邮）、EXPRESS（快递）、EMS（EMS）

			//选填参数
			string seller_ip = string.Empty;                                          //卖家本地电脑IP地址

			/////////////////////////////////////////////////////////////////////////////////////////////////////

			//构造请求函数
			AlipayService aliService = new AlipayService(
				partner,
				trade_no,
				logistics_name,
				invoice_no,
				transport_type,
				seller_ip,
				key,
				input_charset,
				sign_type);

			//GET方式传递
			string url = aliService.Create_url();

			//////////////////////////////////////////远程XML解析////////////////////////////////////////////////
			//远程XML解析,是点击“发货”后，支付宝立刻反馈回来的信息。称作为：XML返回
			//注意：远程解析XML出错，与IIS服务器配置有关
			XmlTextReader Reader = new XmlTextReader(url);
			XmlDocument xmlDoc = new XmlDocument();
			xmlDoc.Load(Reader);

			//******************************************返回处理**********************************************//
			////////////////////////////////////////////////////////////////////////////////////////////////////
			//解析XML，获取XML返回的数据，如：请求处理是否成功、商家网站唯一订单号、支付宝交易号、发货时间等
			string nodeIs_success = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText;
			string nodeOut_trade_no = string.Empty;
			string nodeTrade_no = string.Empty;
			string nodeTrade_status = string.Empty;
			string nodeLast_modified_time = string.Empty;
			string nodeError = string.Empty;

			if (nodeIs_success == "T")
			{
				nodeOut_trade_no = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/out_trade_no").InnerText;
				nodeTrade_no = xmlDoc.SelectSingleNode("/alipay/request").ChildNodes[2].InnerText;
				nodeTrade_status = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/trade_status").InnerText;
				nodeLast_modified_time = xmlDoc.SelectSingleNode("/alipay/response/tradeBase/last_modified_time").InnerText;
			}
			else
			{
				nodeError = xmlDoc.SelectSingleNode("/alipay/error").InnerText;
			}

			//打印页面
			System.Text.StringBuilder sbHtml = new System.Text.StringBuilder();
			sbHtml.Append("<table align=center width=350 cellpadding=5 cellspacing=0>");
			sbHtml.Append("<tr><td align=center class=font_title colspan=2>XML返回</td></tr>");
			sbHtml.Append("<tr><td class=font_content align=right>请求处理是否成功：</td><td class=font_content align=left>" + nodeIs_success + "</td></tr>");
			if (nodeIs_success == "T")
			{
				sbHtml.Append("<tr><td class=font_content align=right>商户网站订单号：</td><td class=font_content align=left>" + nodeOut_trade_no + "</td></tr>");
				sbHtml.Append("<tr><td class=font_content align=right>支付宝交易号：</td><td class=font_content align=left>" + nodeTrade_no + "</td></tr>");
				sbHtml.Append("<tr><td class=font_content align=right>交易状态：</td><td class=font_content align=left>" + nodeTrade_status + "</td></tr>");
				sbHtml.Append("<tr><td class=font_content align=right>发货时间等：</td><td class=font_content align=left>" + nodeLast_modified_time + "</td></tr>");
			}
			else
			{
				sbHtml.Append("<tr><td class=font_content align=right>错误：</td><td class=font_content align=left>" + nodeError + "</td></tr>");
			}
			sbHtml.Append("</table>");

			LblXml.Text = sbHtml.ToString();

			////////////////////////////////////////////////////////////////////////////////////////////////////
			//请在此处编写商户发货成功后的业务逻辑程序代码，以便把商户网站里的该笔订单与支付宝的订单信息同步。

			///////////////////////////////////////////////////////////////////////////////////////////////////
		}
	}
}
